package main //必须
import "fmt"

func main() {
	condition(1, func(uid int) bool {
		fmt.Println("这里走过吗？")
		return uid > 0
	})
}

type TestFn func(uid int) bool

func condition(a int, f TestFn) {
	if a > 0 {
		fmt.Println("第一步")
		return
	}
	if f(a) {
		fmt.Println("执行了第二步")
		return
	}
}

//函数的返回值是一个匿名函数，返回一个函数类型
func test02() func() int {
	var x int //没有初始化，值为0

	return func() int {
		x++
		return x * x
	}
}

func testbibao() {
	//返回值为一个匿名函数，返回一个函数类型，通过f来调用返回的匿名函数，f来调用闭包函数
	//它不关心这些捕获了的变量和常量是否已经超出了作用域
	//所以只有闭包还在使用它，这些变量就还会存在。
	f := test02()
	fmt.Println(f())
	fmt.Println(f())
	fmt.Println(f())
	fmt.Println(f())
	fmt.Println(f())
}
